#/*************************************************************************
#    > File Name: Lib/Folder_Operation.py
#    > Author: Yan Wang
#    > Mail: wangyan@imnu.edu.cn
#    > Created Time: 2022年06月22日 星期三 11时31分17秒
# ************************************************************************/
#!/usr/bin/env python
# -*- coding: utf-8 -*-
from Library import *


# 创建文件夹， 包含两个参数， folder_name 是文件夹名称， local 是文件夹位置
def Create_Folder(target_folder, local="./"):
	target_folder = Path(local) / target_folder 
	if target_folder.is_file():
		Create_Folder_from_FileDir(target_folder,local)
	if not target_folder.exists():   #exist()判断是否存在文件
		if target_folder.suffix == "":
			os.makedirs(target_folder)   #用于递归创建目录
		else :
			Create_Folder_from_FileDir(target_folder,local)
		print("In Create_Folder: create a folder at ", target_folder)
	return(target_folder)



# 创建文件夹， 文件夹的名称根据输入的文件名 去掉文件类型来决定， 
# 例如输入 ./examples/file1.dat, 则 local 的路径下创建名为 file1 的文件夹
def Create_Folder_from_File(folder_name, local="./"):
	target_folder = Path(folder_name).stem   #Path().stem提取无后缀的文件名
	target_folder = Create_Folder(target_folder, local)
	return(target_folder)


# 创建文件夹， 文件夹的名称根据输入的文件路径决定， 
# 例如输入 ./examples/test/sub_folder/file1.dat, 则 example 的路径下创建名为 test 以及 sub_folder 的文件夹
def Create_Folder_from_FileDir(folder_name,local="./"):
	target_folder = os.path.dirname(folder_name)   #os.path.dirname()去掉文件名，返回目录
	target_folder = Create_Folder(target_folder,local)
	return(target_folder)



# 计算一个文件夹中，某一类文件的数目
# 如 文件夹中包含 file_1.dat, file_2.dat 则返回值为2
# 这个函数既可以统计文件数量，也可统计文件夹数量
# 用file_type控制要查找的文件类型，以防存在多个文件名符合要求，但明显文件类型不同的混淆结果
def Find_File(input_folder,label, file_type="file"):
	#print("In Find_File, input folder is ", folder, " input label is ", label)
	folder=Path(input_folder)
	file_list_all=[]
	for file in folder.iterdir():   #.iterdir() 的方法用于创建一个迭代器包含该目录下所有文件和目录；Path(folder).iterdir()获取 folder 下的所有文件和目录列表。
		judge = False
		if file_type != "":
			if file_type == "file" :
				if file.is_file() :
					judge= True
			elif file_type == "folder" :
				if file.is_dir():
					judge = True
			else:
				this_file_type=file.suffix
				if file.is_file() and this_file_type in file_type :
					judge = True
		else:
			judge = True
		if judge == False:
			continue
		file_name=os.path.basename(file)
		match=re.search(label,file_name)
		if(match!=None):
			full_file_name=folder / file_name
			file_list_all.append(full_file_name)
	return(file_list_all)


# 显示一个文件夹下所有的文件
def Show_All_File_Name_in_Folders(folder_name):
	g = os.walk(folder_name)  
	all_name=[]
	for path,dir_list,file_list in g:  
		print(path,dir_list,file_list)
		for file_name in file_list:  
			full_name=Path(path)/ file_name
			print(full_name)
			all_name.append(full_name)
	return(all_name)

# 显示一个文件夹下所有子目录
def Show_All_SubFolder_Name_in_Folders(folder_name):
	g = os.walk(folder_name)  
	all_name=[]
	for path,dir_list,file_list in g:  
		for dir_name in dir_list:  
			full_name=Path(path)/ dir_name 
			all_name.append(full_name)
	return(all_name)

